<template> <section class="flex flex-col items-center min-h-screen"> <div class="container w-full p-6 max-w-6xl grow flex flex-col items-center bg-slate-300"> <NuxtLink class="w-full m-4 flex justify-end" :to="'/'"> <uiClose /> </NuxtLink> <img class="rounded-lg mb-6" :src="config.public.IMG_BASE_URL + film?.poster_path" :alt="film?.title"> <div class="poster flex flex-col lg:flex-row w-full justify-center"> <span> <h1 class="text-4xl font-bold leading-relaxed"> {{ film?.title }} </h1> <h2 class="text-2xl text-slate-700"> {{ director }} </h2> <p class="my-8"> {{ film?.overview }} </p> <p> {{ formatPercent(film?.vote_average as number) }} % </p> <p> {{ film?.vote_count }} votes </p> <div class="flex justify-center"> <ul class="flex items-center overflow-y-hidden overflow-x-scroll w-full max-w-lg"> <li v-for="star in film?.credits.cast" class="flex flex-col items-center p-4 bg-slate-200 rounded m-4"> <UiPerson class="h-10" /> {{ star.name }} </li> </ul> </div> <ul class="flex"> <li v-for="genre in film?.genres" class="p-8"> {{ genre.name }} </li> </ul> </span> </div> <div> <CommentForm :filmId="film?.id" /> <CommentList :filmId="film?.id" /> </div> </div> </section> </template> <script setup lang="ts"> const route = useRoute() const config = useRuntimeConfig() interface FilmDetails { title: string, id: number, poster_path: string, release_date: number, vote_average: number, vote_count: number, genres: genre[], overview: string, credits: Credits, } interface genre { id: number, name: string, } interface Credits { id: string, cast: Cast[], crew: Crew[], } interface Cast { adult: boolean, gender: number, id: number, known_for_department: string, name: string, original_name: string, popularity: number, profile_path: string, cast_id: number, character: string, credit_id: string, order: number, } interface Crew { adult: boolean, gender: number, id: number, known_for_department: string, name: string, original_name: string, popularity: number, profile_path: string | null, credit_id: string, department: string, job: string, } const film: Ref<FilmDetails | null> = ref(null) const filmId: Ref<string> = ref('') const director: Ref<string> = ref('') filmId.value = route.params.id as string if (filmId.value !== '') { const { data } = await useFetch(`/api/details/${filmId.value}`) film.value = data.value as FilmDetails const dataDirector = film.value.credits.crew.filter((member) => member.job === 'Director') director.value = dataDirector[0].name } onMounted(() => { window.scrollTo(0, 0) }) </script>